package com.are.odisea;

import java.sql.ResultSet;
import java.sql.SQLException;

public class ConfirmarOrden {
	
	private db conexion = null;
	
	public static int COMMIT_ON = 1;
	public static int COMMIT_OFF = 0;

	public db getConexion() {
		return conexion;
	}

	public void setConexion(db conexion) {
		this.conexion = conexion;
	}

	public ConfirmarOrden(db conexion) {
		super();
		this.conexion = conexion;
	}
	
	public boolean ConfirmarOrdenMantenimiento (int id_reporte,String orden, String nota, String estado, String usuario, String fecha) throws SQLException {
		boolean result = false;
		String sql = "update odsst set odsobct=?, odsesct=?, odsusct=?, odsesta='6',odsfein=?,odsfefi=?,odsfcba=sysdate() where odscodi=? and odsesta='100'";
		java.sql.PreparedStatement pst = conexion.getConnection()
				.prepareStatement(sql);
		pst.setString(1, nota);
		pst.setString(2, estado);
		pst.setString(3, usuario);
		pst.setString(4, fecha);
		pst.setString(5, fecha);
		pst.setString(6, orden);
		if (conexion.Update(pst) > 0) {
			result = true;
			
		}
		
		
		return result;
	}
	
	public boolean ConfirmarOrdenInstalacion (int id_reporte,String orden, String nota, String estado, String usuario, String fecha) throws SQLException {
		boolean result = false;
		String sql = "select odsesre from odsvpi where odsesta='100' and odscodi=?";
		java.sql.PreparedStatement pst = conexion.getConnection()
				.prepareStatement(sql);
		pst.setString(1, orden);
		ResultSet rs = conexion.Query(pst);
		if (rs.next()) {
			String esta = rs.getInt("odsesre")==1?"6":"5";  // 6-ATENDIDA 5-QUIEBRE
			sql = "update odsvpi set odsobct=?, odsesct=?, odsusle=?, odsesta=?,ODSFATI=?,ODSFATF=?,odsfcba=sysdate() where odscodi=? and odsesta='100'";
			pst = conexion.getConnection()
					.prepareStatement(sql);
			pst.setString(1, nota);
			pst.setString(2, estado);
			pst.setString(3, usuario);
			pst.setString(4, esta);
			pst.setString(5, fecha);
			pst.setString(6, fecha);
			pst.setString(7, orden);
			if (conexion.Update(pst) > 0) {
				if (this.AgregarEstadoOrdenInstalacion(orden)) {
					result = true;
				}else {
					throw new SQLException("Error al agregar el estado de los productos en la orden ID=" + orden);
				}
			}
		}else {
			throw new SQLException("Orden no encontrada ID=" + orden);
		}
		return result;
	}
	
	public  boolean AgregarEstadoOrdenInstalacion(String orden) throws SQLException {
		boolean result = false;
		String sql = "select * from reporte_productos where orden=? and estado = 1";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, orden);
		ResultSet rs = conexion.Query(pst);
		if (rs.next()) {

			do {
					sql = "insert into view_ods_productos (orden,producto,accion,causal) values (?,?,?,?)";
					pst = conexion.getConnection().prepareStatement(sql);
					pst.setString(1, orden);
					pst.setString(2, rs.getString("producto"));
					pst.setString(3, rs.getString("accion"));
					pst.setString(4, rs.getString("causal"));
					if (!(conexion.Update(pst) > 0)) {
						throw new SQLException("Error al registrar el estado del producto es SISCOS");
					}
			}while(rs.next());
			
			if (this.ConfirmarEstadoProductos(orden)) {
				result = true;
			}else {
				throw new SQLException ("Error al confirmar el estado de los productos en ODISEA para la orden ID=" + orden);
			}
		}else {
			throw new SQLException ("Productos no encontrados para la orden ID=" + orden);
		}
		return result;
	}
	
	public boolean ConfirmarEstadoProductos(String orden) throws SQLException {
		boolean result = false;
		String sql = "update reporte_productos set estado = 2 where orden=? and estado=1";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, orden);
		if (conexion.Update(pst) > 0 ) {
			result = true;
		}
		
		return result;
	}

}
